﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Articulos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Formularios.Controles
{
    public partial class SubRubrosArticulosSeleccionarMultiple : UserControl, ISubRubrosArticulosSeleccionarMultiple
    {
        public SubRubrosArticulosSeleccionarMultiple()
        {
            InitializeComponent();
            presentador = new SubRubrosArticulosSeleccionarMultiplePresentador(this);
        }

        private SubRubrosArticulosSeleccionarMultiplePresentador presentador;
        private Boolean estanSeleccionados = true;
        private List<Int32> idSubRubrosArticulosSeleccionados = new List<Int32>();
        private Boolean agregando = false;
        public delegate void SeleccionadoHandler();
        public event SeleccionadoHandler Seleccionado = delegate { };

        public List<Int32> IdSubRubrosArticulosSeleccionados
        {
            get { return idSubRubrosArticulosSeleccionados; }
        }

        public Int32 IdRubroArticulo
        {
            get { return ucRubroArticulo.IdRubroArticuloSeleccionado; }
            set { ucRubroArticulo.IdRubroArticuloSeleccionado = value; }
        }

        public List<SubRubroArticulo> ListadoSubRubrosArticulos
        {
            set
            {
                agregando = true;
                estanSeleccionados = true;
                lstSubRubrosArticulos.Items.Clear();
                foreach (var item in value)
                    lstSubRubrosArticulos.Items.Add(item, true);
                agregando = false;
                lstSubRubrosArticulos.DisplayMember = "Nombre";
            }
        }

        private void btnMarcarDesmarcar_Click(Object sender, EventArgs e)
        {
            agregando = true;
            for (var i = 0; i < lstSubRubrosArticulos.Items.Count; i++)
                lstSubRubrosArticulos.SetItemChecked(i, !estanSeleccionados);
            estanSeleccionados = !estanSeleccionados;
            agregando = false;
            Seleccionado();
        }

        private void lstSubRubrosArticulos_ItemCheck(Object sender, ItemCheckEventArgs e)
        {
            idSubRubrosArticulosSeleccionados.Clear();
            foreach (SubRubroArticulo item in lstSubRubrosArticulos.CheckedItems)
                idSubRubrosArticulosSeleccionados.Add(item.Id);
            if (e.NewValue == CheckState.Checked)
                idSubRubrosArticulosSeleccionados.Add(((SubRubroArticulo)lstSubRubrosArticulos.Items[e.Index]).Id);
            else if (e.NewValue == CheckState.Unchecked)
                idSubRubrosArticulosSeleccionados.Remove(((SubRubroArticulo)lstSubRubrosArticulos.Items[e.Index]).Id);

            if (!agregando)
                Seleccionado();
        }

        public void Actualizar()
        {
            presentador.Actualizar();
        }

        public void LimpiarCampos()
        {
            ucRubroArticulo.IdRubroArticuloSeleccionado = (Int32)EnumRubrosArticulos.Todos;
            ucRubroArticulo.Actualizar();
        }

        private void ucRubroArticulo_Seleccionado()
        {
            presentador.Actualizar();
            Seleccionado();
        }
    }
}
